﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Mundialeitor.App_Util;
using Entidades;
using Negocio;

namespace Mundialeitor
{
    public partial class CtaCteABM : PaginaBase
    {
        public UsuarioEntity Usuario
        {
            get { return (UsuarioEntity)Session["Usuario"]; }
            set { Session["Usuario"] = value; }
        }
        public List<UsuarioEntity> ListaUsuarios
        {
            get { return (List<UsuarioEntity>)Session["ListaUsuarios"]; }
            set { Session["ListaUsuarios"] = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (Usuario != null && Usuario.TipoUsuario.Id == (int)EnumTipoUsuario.Administrador)
                {
                    if (!IsPostBack)
                    {
                        CargarComboUsuario();
                        CargarComboConceptoMovimiento();
                    }
                }
                else
                {
                    Server.Transfer(PagesConstants.Login);
                }
            }
            catch (Exception ex)
            {
                MostrarMensaje(ex);
            }
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                var regla = new CuentaCorrienteRules();
                var ctacte = new CuentaCorrienteEntity();

                ctacte.MontoMovimiento = float.Parse(txtMonto.Text.Trim());
                ctacte.FechaMovimiento = DateTime.Today;

                int idUsuario = int.Parse(ddlUsuario.SelectedValue);

                var reglaUsuario = new UsuarioRules();
                ctacte.Usuario = reglaUsuario.SeleccionarUsuarioID(idUsuario);
                
                int idTipoMovimiento = int.Parse(ddlTipoMovimiento.SelectedValue);
                regla.CrearMovimientoEnCuenta(ctacte, idTipoMovimiento);

                MostrarMensajeDialogo(EnumTipoDeMensaje.Informacion, "Operación exitósa.");
                ModoConsulta(true);
            }
            catch (Exception ex)
            {
                MostrarMensaje(ex);
            }
        }

        private void CargarComboUsuario()
        {
            var regla = new UsuarioRules();
            var lista = regla.SeleccionarTodos();

            Session["usuarios"] = lista;

            Utilidades.CargarCombo(ddlUsuarioFiltro, lista, "Login", "Id", String.Empty);
            Utilidades.CargarCombo(ddlUsuario, lista, "Login", "Id", String.Empty);
        }

        private void CargarComboConceptoMovimiento()
        {
            Utilidades.CargarComboDesdeEnumeracion(ddlConceptoMovimientoFiltro, typeof(Entidades.EnumConceptosMovimientos), String.Empty);
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            try
            {
                var regla = new CuentaCorrienteRules();

                if (Todos())
                {
                    var lista = regla.ObtenerTodas();
                    CargarGrilla(lista);
                }
                else
                {
                    string fechaDesde = txtFechaDesde.Text.Trim();
                    string fechaHasta = txtFechaHasta.Text.Trim();
                    int idUsuario = int.Parse(ddlUsuarioFiltro.SelectedValue); 
                    string conceptoMovimiento = ddlConceptoMovimientoFiltro.SelectedItem.Text;

                    if (ValidarFiltros())
                    {
                        var lista = regla.ObtenerPorFiltro(fechaDesde, fechaHasta, idUsuario, conceptoMovimiento);
                        CargarGrilla(lista);
                    }
                }
            }
            catch (Exception ex)
            {
                MostrarMensaje(ex);
            }
        }

        private bool ValidarFiltros()
        {
            bool valor = false;
            string fechaDesde = txtFechaDesde.Text.Trim();
            string fechaHasta = txtFechaHasta.Text.Trim();
            int idUsuario = int.Parse(ddlUsuarioFiltro.SelectedValue);
            string conceptoMovimiento = ddlConceptoMovimientoFiltro.SelectedItem.Text;

            if ((!String.IsNullOrEmpty(fechaDesde) && (!String.IsNullOrEmpty(fechaHasta))) || (idUsuario > 0) || (!String.IsNullOrEmpty(conceptoMovimiento)))
            {
                valor = true;
            }

            return valor;
        }

        private bool Todos()
        {
            bool valor = false;
            string desde = txtFechaDesde.Text.Trim();
            string hasta = txtFechaHasta.Text.Trim();
            int idUsuario = 0;

            if (!String.IsNullOrEmpty(ddlUsuarioFiltro.SelectedItem.Text.Trim()))
            {
                idUsuario = int.Parse(ddlUsuarioFiltro.SelectedValue);
            }
            
            string concepto = ddlConceptoMovimientoFiltro.SelectedItem.Text;

            if (String.IsNullOrEmpty(desde) && String.IsNullOrEmpty(hasta) && (idUsuario == 0) && (String.IsNullOrEmpty(concepto)))
            {
                valor = true;
            }

            return valor;
        }

        private void CargarGrilla(List<CuentaCorrienteEntity> lista)
        {
            Session["datosGrilla"] = lista;
            Utilidades.CargarGrilla(gvGrilla, lista);
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            try
            {
                ModoConsulta(false);
            }
            catch (Exception ex)
            {
                MostrarMensaje(ex.Message);
            }            
        }

        private void ModoConsulta(bool valor)
        {
            divConsulta.Visible = valor;
            divABM.Visible = !valor;

            LimpiarGrilla();
            LimpiarControles();
        }

        private void LimpiarGrilla()
        {
            gvGrilla.DataSource = null;
            gvGrilla.DataBind();
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                LimpiarControles();
                ModoConsulta(true);
            }
            catch (Exception ex)
            {
                MostrarMensaje(ex.Message);
            }
        }

        private void LimpiarControles()
        {
            txtFechaDesde.Text = String.Empty;
            txtFechaHasta.Text = String.Empty;
            ddlUsuarioFiltro.SelectedIndex = 0;
            ddlConceptoMovimientoFiltro.SelectedIndex = 0;

            ddlUsuario.SelectedIndex = 0;
            ddlTipoMovimiento.SelectedIndex = 0;
            txtMonto.Text = String.Empty;
        }
    }
}
